/**
 * 
 */
package de.sinnlosimnetz.forum;

import de.sinnlosimnetz.forum.database.DatabaseData;
import de.sinnlosimnetz.forum.util.SinConnector;
import de.sinnlosimnetz.forum.util.SinConnectorEnum;
import de.sinnlosimnetz.forum.util.SinDbTwoConnector;
import de.sinnlosimnetz.forum.util.SinException;
import de.sinnlosimnetz.forum.util.SinMySqlConnector;
import de.sinnlosimnetz.forum.util.SinOracleConnector;
import de.sinnlosimnetz.forum.ws.server.AbstractInfo;
import de.sinnlosimnetz.forum.ws.server.InputInfo;
import de.sinnlosimnetz.forum.ws.server.LastOnlineInfo;
import de.sinnlosimnetz.forum.ws.server.LastPostInfo;
import de.sinnlosimnetz.forum.ws.server.LastThreadInfo;
import de.sinnlosimnetz.forum.ws.server.MostPostInfo;

/**
 * @author Henning D
 *
 */
public class SinStatistik
{
	private InputInfo input = null;
	
	private SinConnector connector = null;
	
	public SinStatistik(InputInfo input)
	{
		this.input = input;
	}
	
	public void init() throws Exception
	{
		DatabaseData res = new DatabaseData("database.xml");
		switch (SinConnectorEnum.getInstance(res.getDbms()))
		{
		case MYSQL:
			connector = new SinMySqlConnector(res);
			break;
		case ORACLE:
			connector = new SinOracleConnector(res);
			break;
		case DB2:
			connector = new SinDbTwoConnector(res);
			break;
		}
		
		if (!res.checkUser(connector.getConnection(), input))
		{
			throw new SinException("Benutzer nicht am Board registriert");
		}
	}
	
	/**
	 * Liefert die angeforderte Information
	 * 
	 * @return Objekt vom Typ AbstractInfo
	 */
	private AbstractInfo getInfo()
	{
		AbstractInfo info = null;
		
		switch (input.getOption())
		{
		case 1:
			// LastPostInfo
			info = new LastPostInfo();
			break;
		case 2:
			// LastThreadInfo
			info = new LastThreadInfo();
			break;
		case 3:
			// LastOnlineInfo
			info = new LastOnlineInfo();
			break;
		case 4:
			// MostPostInfo
			info = new MostPostInfo();
			SinMostPostInfo select = new SinMostPostInfo(input.getOption());
			try
			{
				select.getUsers(connector.getConnection());
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
			break;
		default:
			return null;
		}
		
		return info;
	}
	
	public static void main(String[] args)
	{
		InputInfo input = new InputInfo();
		input.setOption(4);
		input.setPass("l1711mn6");
		input.setUser("sinnlosimnetz");
		
		SinStatistik stat = new SinStatistik(input);
		try
		{
			stat.init();
			AbstractInfo info = stat.getInfo();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}
